package insight.chain.validation;

import insight.chain.exception.ValidatorException;


import java.util.ArrayList;
import java.util.List;

/**
 * @author huu
 * @create 2025-08-25-19:00
 */
public class ValidatorChain {

    // 存放所有处理器,列表或者link都行
    private List<ValidatorHandler> handlers = new ArrayList<>();

    // 校验方法
    public void validate(Object value) throws ValidatorException {
        ValidatorContext context = new ValidatorContext(value);
        while(true){
            int index = context.currentIndex();
            if (index >= handlers.size()) {
                break;
            }
            ValidatorHandler handler = handlers.get(index);
            handler.validate(context.getValue(), context);
            //因为当前index未++也就是说这个处理器没有希望下一个处理器donext,所以就退出
            if(index == context.currentIndex()){
                break;
            }
        }

//        for (ValidatorHandler handler : handlers) {
//            handler.validate(value, context);
//            if (context.shouldStop()) {
//                break;
//            }
//        }
        context.throwsExceptionIfNecessary();
    }

    public void addLastHandler(ValidatorHandler handler) {
        this.handlers.add(handler);
    }
}
